#ifndef CLOCKMODEL_H
#define CLOCKMODEL_H

#include <QObject>
#include <QTimer>
#include <QDateTime>
#include <QString>

/**
 * @brief ClockModel - 时钟应用的核心C++模型
 * 
 * 这个类处理所有时钟相关的逻辑：
 * - 实时时间更新
 * - 日期格式化
 * - 星期显示
 * - 12/24小时制切换
 */
class ClockModel : public QObject
{
    Q_OBJECT
    
    // Q_PROPERTY 使属性可以在 QML 中绑定
    Q_PROPERTY(QString currentTime READ currentTime NOTIFY timeChanged)
    Q_PROPERTY(QString currentDate READ currentDate NOTIFY dateChanged)
    Q_PROPERTY(QString currentWeekDay READ currentWeekDay NOTIFY weekDayChanged)
    Q_PROPERTY(bool is24HourFormat READ is24HourFormat WRITE setIs24HourFormat NOTIFY formatChanged)
    
public:
    explicit ClockModel(QObject *parent = nullptr);
    ~ClockModel();
    
    // 属性读取方法
    QString currentTime() const { return m_currentTime; }
    QString currentDate() const { return m_currentDate; }
    QString currentWeekDay() const { return m_currentWeekDay; }
    bool is24HourFormat() const { return m_is24HourFormat; }
    
    // 属性写入方法
    void setIs24HourFormat(bool format);
    
    // Q_INVOKABLE 使方法可以在 QML 中调用
    Q_INVOKABLE void toggleTimeFormat();  // 切换12/24小时制
    Q_INVOKABLE void startClock();         // 启动时钟
    Q_INVOKABLE void stopClock();          // 停止时钟
    
signals:
    // 属性变化信号
    void timeChanged();
    void dateChanged();
    void weekDayChanged();
    void formatChanged();
    
private slots:
    void updateTime();  // 定时器触发的槽函数
    
private:
    void formatTime();   // 格式化时间
    void formatDate();   // 格式化日期
    void formatWeekDay(); // 格式化星期
    
    QTimer *m_timer;           // 定时器
    QString m_currentTime;     // 当前时间字符串
    QString m_currentDate;     // 当前日期字符串
    QString m_currentWeekDay;  // 当前星期字符串
    bool m_is24HourFormat;     // 是否24小时制
    QDateTime m_dateTime;      // 当前日期时间对象
};

#endif // CLOCKMODEL_H

